import Vue from 'vue'
import VueRouter from 'vue-router'
import routes from './routers'
import store from '../store'

Vue.use(VueRouter)

// 重写VueRouter的replace方法
const VueRouterRplace = VueRouter.prototype.replace
VueRouter.prototype.replace = function replace (to) {
  return VueRouterRplace.call(this, to).catch(err => err)
}

//在路由跳转的时候同一个路由多次添加是不被允许的
//重写路由的push方法
const VueRouterPush = VueRouter.prototype.push
VueRouter.prototype.push = function push (to) {
  return VueRouterPush.call(this, to).catch(err => err)
}

const router = new VueRouter({
  routes,
  scrollBehavior: (to, from, savedPosition) => {
    if (savedPosition) {
      return savedPosition
    } else {
      return { x: 0, y: 0 }
    }
  }
})

// 路由权限检测
router.beforeEach(async (to, from, next) => {
  // 先检查页面是否需要登录
  if (to.meta.auth) {
    // 检查用户是否登录，如果登录了（vuex中存储的登录状态）就再次通过后台接口确认登录状态，以仿假冒信息登录
    if (store.state.user.isLogin) {
      // 通过后台接口检测登录状态
      let isLogin = await store.dispatch('user/loginCheck')
      if (isLogin) {
        next()
      } else {
        next({ name: 'login' })
      }
    } else {
      next({ name: 'login' })
    }
  } else {
    next()
  }
})
export default router
